package com.keba.lamp.complaint.service;

import com.keba.basic.base.service.SuperService;
import com.keba.lamp.complaint.entity.Case;
import com.keba.lamp.complaint.vo.result.CaseResultVO;
import com.keba.lamp.complaint.vo.result.EvidenceResultVO;
import com.keba.lamp.complaint.vo.result.ShareInfoResultVO;
import com.keba.lamp.complaint.vo.save.CaseFileUploadVO;
import com.keba.lamp.complaint.vo.save.CaseSaveVO;
import com.keba.lamp.complaint.vo.update.CaseSendEmailVO;
import com.keba.lamp.complaint.vo.update.CaseUpdateComplaintContentVO;
import com.keba.lamp.complaint.vo.update.CaseUpdateVO;
import com.keba.lamp.file.vo.result.FileResultVO;
import com.keba.lamp.model.entity.system.SysUser;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;


/**
 * <p>
 * 业务接口
 * 诉讼状案件
 * </p>
 *
 * @author twg
 * @date 2025-03-14 21:47:52
 * @create [2025-03-14 21:47:52] [twg] [代码生成器生成]
 */
public interface CaseService extends SuperService<Long, Case> {

    /**
     * 删除案件数据
     *
     * @param ids id
     * @return 是否成功
     */
    Boolean delete(List<Long> ids);

    /**
     * 获取案件详情
     * @param id
     * @return
     */
    CaseResultVO getCaseById(Long id);

    /**
     * 查询案件证据列表
     * @param id
     * @return
     */
    List<EvidenceResultVO> getEvidenceList(Long id, String bizType, String caseType);

    /**
     * 生成起诉书
     * @param caseId
     * @return
     */
    boolean callAi(Long caseId);

    /**
     * 前置校验
     * @param caseUpdateVO
     * @return
     */
    void enableCallAi(CaseUpdateVO caseUpdateVO);

    /**
     * 前置校验
     * @param caseSaveVO
     */
    void enableCallAi(CaseSaveVO caseSaveVO);

    /**
     * 前置校验
     * @param caseResultVO
     */
    void enableCallAi(CaseResultVO caseResultVO);

    /**
     * 是否可以编辑
     * @param caseId
     * @return
     */
    boolean enableUpdate(Long caseId);

    /**
     * 修改起诉状
     * @param caseUpdateComplaintContentVO
     * @return
     */
    boolean updateComplaintContent(CaseUpdateComplaintContentVO caseUpdateComplaintContentVO);

    /**
     * 修改案件状态
     * @param caseId
     * @param status
     * @return
     */
    boolean updateCaseStatus(Long caseId, String status);

    /**
     * 修改案件关联用户ID
     * @param phone
     * @param userId
     * @return
     */
    boolean updateCaseShareUserId(String phone, Long userId);

    /**
     * 生成分享链接
     * @param caseId
     * @param phone
     * @return
     */
    ShareInfoResultVO createShareLink(Long caseId, String phone);

    /**
     * 发送邮件
     * @param caseSendEmailVO
     * @param sysUser
     * @return
     */
    Boolean sendEmail(CaseSendEmailVO caseSendEmailVO, SysUser sysUser);

    /**
     * 是否h5请求
     * @return
     */
    boolean isH5Req();

    /**
     * 查询案件状态
     * @return
     */
    String getCaseState(Long caseId);

    /**
     * 上传签名文件
     *
     * @param file         文件
     * @param caseFileUploadVO 参数
     * @return 签名文件
     */
    FileResultVO upload(MultipartFile file, CaseFileUploadVO caseFileUploadVO);

    /**
     * 删除签名文件
     * @param fileIds
     * @return
     */
    Boolean deleteSignatureFile(List<Long> fileIds);
}


